package com.emmmya.harinCheck.result;

import com.emmmya.harinCheck.annotation.Check;

import java.util.LinkedList;
import java.util.List;

/**
 * 校验结果
 * @author Harin
 * @version 1.0
 * @date 2022-04-29 19:37:47
 */
public class CheckResult {

    @Check(name="校验结果",desc="true表示校验成功，false表示校验失败，" +
                                "则可以查看message错误信息，没有规定死，可以自定义")
    private Boolean result;
    @Check(name="校验信息",desc="当result为false时，message为错误信息")
    private String message;
    @Check(name="当前校验属性名称",desc = "当前校验的属性，来源@Check的name属性")
    private String name;
    @Check(name="当前校验属性值",desc = "当前校验的属性得值")
    private Object value;

    @Check(name="深度校验错误信息",desc = "深度校验错误信息")
    private LinkedList<String> deepMessage;


    public Boolean getResult() {
        return result;
    }

    public String getMessage() {
        return message;
    }

    public String getName() {
        return name;
    }

    public Object getValue() {
        return value;
    }

    private CheckResult(){}

    private CheckResult(Boolean result,String message){
        this.result = result;
        this.message = message;
    }

    private CheckResult(Boolean result,String message,String name,Object value){
        this.result = result;
        this.message = message;
        this.name = name;
        this.value = value;
    }

    /**
     * 自定义构建校验对象
     * @param result        校验结果
     * @param message       校验消息
     */
    public static CheckResult buidle(Boolean result,String message){
        return new CheckResult(result,message);
    }

    /**
     * 通过构建函数
     * @return
     */
    public static CheckResult adopt(){
        return new CheckResult(true,"");
    }
    /**
     * 通过构建函数
     * @param message   校验通过时的消息
     * @return
     */
    public static CheckResult adopt(String message){
        return new CheckResult(true,message);
    }

    /**
     * 失败时的构建函数
     * @param message   错误消息
     * @return
     */
    public static CheckResult fail(String message){
        return new CheckResult(false,message);
    }

    /**
     * 失败时的构建函数【推荐使用，可以更直观的查看问题属性】
     * @param message   错误消息
     * @param name      当前校验的属性名
     * @param value     当前校验的属性值
     * @return
     */
    public static CheckResult fail(String message,String name,Object value){
        return new CheckResult(false,message,name,value);
    }

    public LinkedList<String> getDeepMessage() {
        return deepMessage;
    }

    public void setDeepMessage(LinkedList<String> deepMessage) {
        this.deepMessage = deepMessage;
    }

    @Override
    public String toString() {
        return "CheckResult{" +
                "result=" + result +
                ", message='" + message + '\'' +
                ", name='" + name + '\'' +
                ", value=" + value +
                ", deepMessage=" + deepMessage +
                '}';
    }
}
